<script>
function Person(name, age) {
  this.name = name;
  this.age = age
}
Person.prototype.say = function() {
  console.log('Hello World')
}

function Star(name, age, money) {
  Person.call(this, name ,age)
  this.money = money
}

// p 啥都有，有 name、age（值是什么）、say
/* const p = new Person()
// 我把一个啥都有的东西给了 Star.prototype，Star.prototype 也是啥都有
Star.prototype = p */

// 上面的写法确实对 Star.prototype 的修改，也会影响到 p，因为上面也是两个对象之间的赋值
// 但是没关系，往往这个 p 咱不会使用，会项下面写法，仅仅做继承
// 我把一个啥都有的东西给了 Star.prototype，Star.prototype 也是啥都有
// 原型继承：继承的是父类原型上面的方法
Star.prototype = new Person()
// #1
Star.prototype.constructor = Star

/* Star.prototype = {
  constructor: Star
  // ...
} */

const s = new Star('王思聪', 20, 100000)
console.log(s.money)

// s 的类型是 Star，s 是通过 Star 造出来，s.constructor 应该指向 Star

// s 确实没有 constructor，为什么能用呢？因为 Star.prototype 有 constructor

// console.log(Star.prototype.constructor === Star)
// console.log(s.__proto__.constructor === Star) // 希望是 true，应该就是 true，但是这儿确实 false
// console.log(s.constructor === Star) // 希望是 true，应该就是 true，但是这儿确实 false

// 如何解决呢？#1 处代码
</script>